<template>
  <upload-excel :on-success="handleSuccess" :before-upload="beforeUpload" />
</template>

<script>
import { reqImportEmployee } from '@/api/employees'
export default {
  name: 'Import',
  methods: {
    // 一、配置读取, 操作, 之前的校验
    beforeUpload(rawFile) {
      // 文件大小的校验
      if (rawFile.size > 20 * 1024 * 1024) {
        this.$message.error('文件过大, 文件大小在20M以内')
        return false
      }
      return true
    },

    // 二、上传成功后的处理函数
    async handleSuccess({ header, results }) {
      // console.log(header, results)
      // 1.header中的字段是中文,需要处理成后台规定的字段
      // 存储着中英文的映射关系
      const userRelations = {
        入职日期: 'timeOfEntry',
        姓名: 'username',
        工号: 'workNumber',
        手机号: 'mobile',
        聘用形式: 'formOfEmployeement',
        转正日期: 'correctionTime',
        部门: 'departmentName',
      }
      // 2. 声明一个处理完数据之后的数组
      const arr = []

      // 3.遍历数据,替换对象中的健名
      results.forEach(item => {
        const userObj = {}
        // 遍历userRelations
        Object.keys(item).forEach(key => {
          // console.log(key)
          // if (['timeOfEntry', 'correctionTime'].includes(userRelations[key])) {
          //   // 入职日期或者转正日期, 需要处理
          //   userObj[userRelations[key]] = this.formatExcelDate(item[key], '-')
          // } else {
          //   userObj[userRelations[key]] = item[key]
          // }
          userObj[userRelations[key]] = item[key]
        })
        arr.push(userObj)
      })
      // console.log(arr)

      // 4.处理完数据,调用接口,上传数据
      await reqImportEmployee(arr)
      this.$message.success('上传成功')
      this.$router.back()
    },

    // 专门用于处理excel中读取的日期格式
    // 参数1: 从excel中获取的日期数字
    // 参数2: 分隔字符串
    // 不传分隔符 => 20210128
    // 传了分隔符 => 2021-01-28
    formatExcelDate(numb, format) {
      const time = new Date((numb - 1) * 24 * 3600000 + 1)
      time.setYear(time.getFullYear() - 70)
      const year = time.getFullYear() + ''
      const month = time.getMonth() + 1 + ''
      const date = time.getDate() - 1 + ''
      if (format && format.length === 1) {
        return (
          year +
          format +
          (month < 10 ? '0' + month : month) +
          format +
          (date < 10 ? '0' + date : date)
        )
      }
      return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
    },
  },
}
</script>

<style></style>
